home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 026-050 / 049 / plot / formula2.c < prev    next >
C/C++ Source or Header  |  1995-03-13  |  5KB  |  154 lines

  1. /* formula2.c -- open a window to get formula,
  2. close it, and proceed as directed.... */
  3.  
  4. #define FWX 300      /* Formula Window Size  */
  5. #define FWY 70
  6.  
  7. #define CAN_GAD 0
  8. #define OK_GAD 1
  9.  
  10. extern char z[30];
  11. extern struct TextAttr TestFont;
  12. /* define ok and cancel gadgets */
  13. struct IntuiText ok_text = {3,2,JAM2,0,2,NL,(UBYTE *) "  OK  ",NL};
  14. struct IntuiText can_text = {3,2,JAM2,0,2,NL,(UBYTE *) "Cancel",NL};
  15. struct Gadget can_gadget = {
  16.    NL, 230,50, 60,11, GADGHCOMP, RELVERIFY,
  17.    BOOLGADGET, NL, NL,
  18.    &can_text, NL,NL, CAN_GAD, NL };
  19.  
  20. struct Gadget ok_gadget = {
  21.    &can_gadget, 230,30, 60,11, GADGHCOMP, RELVERIFY,
  22.    BOOLGADGET, NL, NL,
  23.    &ok_text, NL,NL, OK_GAD, NL };
  24.  
  25. /* define formula gadget */
  26.  
  27. #define FORMULASIZE 30
  28. USHORT FormulaVectors[] = {
  29.    -1,-1,
  30.    182,-1,
  31.    182, 12,
  32.    -1, 12,
  33.    -1, -1,
  34. };
  35.  
  36. struct Border FormulaBorder = {
  37.    -1, -1,           /* initial offsets, gadget relative */
  38.    1, 0, JAM1, /* pens (fore, back) and drawmode */
  39.    5,                /* number of vectors */
  40.    FormulaVectors,     /* pointer to the actual array of vectors */
  41.    NULL       /* no next Border, can point to another border */
  42. };
  43.  
  44. /* default text */
  45. UBYTE FormulaBuffer[FORMULASIZE] = "COS(x)*COS(y)";
  46. UBYTE UndoFormulaBuffer[FORMULASIZE];
  47. struct StringInfo FormulaInfo = {
  48.    FormulaBuffer,    /* pointer to I/O buffer */
  49.    UndoFormulaBuffer,    /* pointer to undo buffer */
  50.    0,             /* buffer position */
  51.    FORMULASIZE,   /* max number of chars, including NULL */
  52.    0, 0,          /* first char in display, undo positions */
  53.    14,          /* number of chars (currently) in the buffer */
  54.    0, 0, 0,    /* position variables calculated by Intuition */
  55.    NULL,          /* no pointer to RastPort */
  56.    0,            /* not a LongInt string gadget */
  57.    NULL           /* no pointer to alternate keymap */
  58. };
  59. struct IntuiText FormulaText = {
  60.    2, 2,    /* FrontPen, BackPen */
  61.    JAM1,          /* DrawMode */
  62.    -101, 0,        /* LeftEdge, TopEdge (relative to gadget) */
  63.    &TestFont,     /* pointer to TextFont */
  64.    (UBYTE *) "Formula: ",    /* pointer to Text */
  65.    NL           /* no pointer to NextText */
  66. };
  67.  
  68. #define FORMULA_GAD 2
  69.  
  70. struct Gadget FormulaGadget = {
  71.    &ok_gadget,             /* pointer to Next Gadget */
  72.    110, 10, 180, 11,  /* (Left Top Width Height) Hit Box */
  73.    GADGHCOMP,        /* Flags */
  74.    RELVERIFY,        /* Activation flags */
  75.    STRGADGET,        /* Type */
  76.    (APTR)&FormulaBorder, /* pointer to Border Image */
  77.    NL,             /* no pointer to SelectRender */
  78.    &FormulaText,        /* pointer to GadgetText */
  79.    NL,                /* no MutualExclude */
  80.    (APTR)&FormulaInfo,  /* pointer to SpecialInfo */
  81.    FORMULA_GAD,                /*  ID */
  82.    NL              /* no pointer to special data */
  83. };
  84.  
  85. /* Used to open a Window   */
  86. struct NewWindow NewFwin = {
  87.    10,65, FWX,FWY, 2,BCOL, NL,    /* IDCMP set up AFTER CALL */
  88.    ACTIVATE | SMART_REFRESH,
  89.    &FormulaGadget,NL, NL,    /* FirstGadget, CheckMark, Title  */
  90.    NL,NL,              /* MUST SET SCREEN AFTER OPENSCREEN!!! */
  91.    FWX,FWY,FWX,FWY, CUSTOMSCREEN }; /* MinW, MinH, MaxW, MaxH */
  92.  
  93.  
  94. /********************************************************************
  95. * formula(window)
  96. *    This is the meat. This routine opens the save window and
  97. * retains control until the user selects the OK or CANCEL gadget.
  98. *     The calling arguement is a window pointer.  That window
  99. * is expected to have opened an IDCMP port, which save uses.
  100. ********************************************************************/
  101. int formula(calling_window)
  102. struct Window *calling_window;
  103. {
  104. struct Window *cW;      /* save window handle   */
  105.  
  106. FAST struct IntuiMessage *imsg;
  107. FAST struct Gadget *igad;
  108.  
  109. FAST int class;
  110. int confirmed;
  111. BOOL stayhere;
  112.  
  113.    /* Get screen from calling window   */
  114.    NewFwin.Screen = calling_window->WScreen;  /* NEED TO SET SCREEN!!! */
  115.    if ( ! (cW = (struct Window *)OpenWindow(&NewFwin)) ) {
  116.       return(FALSE); /* Oops...  */
  117.       }
  118.  
  119.    cW->UserPort = calling_window->UserPort;
  120.    ModifyIDCMP(cW, GADGETUP | GADGETDOWN);
  121.    stayhere=TRUE;
  122.    while (stayhere == TRUE) {
  123.       while (imsg=(struct IntuiMessage *)GetMsg(cW->UserPort)) {
  124.          class = imsg->Class;
  125.          ReplyMsg(imsg);
  126.          switch ( class ) {
  127.             case GADGETUP:
  128.             case GADGETDOWN:
  129.                igad =(struct Gadget *) imsg->IAddress;
  130.                switch ( igad->GadgetID ) {
  131.                   case CAN_GAD:
  132.                      confirmed=0;
  133.                      stayhere=FALSE;
  134.                      break;
  135.                   case OK_GAD:
  136.                      strcpy(z,FormulaBuffer);
  137.                      confirmed=1;
  138.                      stayhere=FALSE;
  139.                      break;
  140.                   case FORMULA_GAD:
  141.                      strcpy(z,FormulaBuffer);
  142.                      break;
  143.                }
  144.          }
  145.       }
  146.    }
  147.    cW->UserPort = NL;
  148.    CloseWindow(cW);
  149.    if (confirmed==1)
  150.       return(1);
  151.    else
  152.       return(0);
  153. }
  154.